(* Interpolação polinomial usando fórmula de Newton - com nós x_i = i  *)

(* dados={{0,0},{1,2},{2,5},{3,-1},{4,0},{5,-10},{6,-19}}; *)
(* função "desconhecida" *)
f[x_]:=Sin[x]^2 //N;
dados=Table[{x,f[x]},{x,0,10}];


(* Leitura dos nós *)
nos=dados[[All,1]];
y = dados[[All,2]];
xmin=Min[nos];
xmax=Max[nos];
n=Length[nos]-1;


(* Diferenças divididas *)
c={};
c=Append[c,y[[1]]];
dif1=y;

For[j=1,j≤ n-1,j++,
dif2={};
For[i=1,i< Length[dif1],i++,
dif2=Append[dif2,(dif1[[i+1]]-dif1[[i]])/j];
];
c=Append[c,dif2[[1]]];
dif1=dif2;
]

c=Append[c,(dif1[[2]]-dif1[[1]])/n];

(* Polinómio interpolador *) 

Newt[j_,x_]:=Product[x-nos[[k+1]],{k,0,j-1}];
Polint[x_]:=Sum[c[[j+1]] Newt[j,x],{j,0,n}]

Show[Plot[{Polint[x],f[x]},{x,xmin,xmax},PlotRange->All],Graphics[{PointSize[Medium],Blue,Point[dados]}]]

Plot[Polint[x]-f[x],{x,xmin,xmax},PlotRange->All]  (* erro *)

?Table